#enableHiveSupport:开启hive元数据支持，可以使用hive中的表
from os import write

from pyspark.sql.functions import *
from pyspark.sql.session import SparkSession



spark = SparkSession\
    .builder\
    .master('local')\
    .appName('hive')\
    .config('spark.sql.shuffle.partitions',1)\
    .enableHiveSupport()\
    .getOrCreate()


spark.sql('show databases').show()

#1,直接写sql处理数据
# spark.sql('drop table bigdata.clazz_num')
spark.sql(
    '''
    create table bigdata.clazz_num as 
    select clazz,count(1) from bigdata.students
    group by clazz
    '''
)

#2,获取表得到DF使用DSL处理数据
students_df = spark.table('bigdata.students')

#通过DSL处理数据
sex_num = students_df.groupby('sex').agg(count('sex').alias('num'))
#创建表
spark.sql("""
create table if not exists bigdata.sex_num(
    sex string,
    num bigint
)
""")

#insertInto:将处理结果写入表中
#overwrite:覆盖写入
sex_num.write.insertInto('bigdata.sex_num',overwrite=True)

#将结果保存到表中，自动创建表，默认格式parquet
#partition: 动态分区

sex_num.write.format('orc').mode('overwrite').saveAsTable('bigdata.sex_num2')